package dao;

import database.DataBase;
import interfaces.KurvItemInterface;
import interfaces.OrdreInterface;
import java.rmi.RemoteException;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import model.LocalVare;
import model.LokalVaregruppe;

public class LokalDB_DAO {

    private DataBase conn;

    public LokalDB_DAO() {
        this.conn = DataBase.getInstance();
    }

    public ArrayList<LocalVare> hentVare(String varegrupppenavn) {
        System.out.println("i vare dao");
        ArrayList<LocalVare> vare = new ArrayList<>();
        ResultSet rs = null;
        /* Hent alle vare grupper */
        String sql = "call `hent varer`('" + varegrupppenavn + "');";
        System.out.println("sql   " + sql);
        try {
            rs = conn.getResult(sql);
            while (rs.next()) /* Hent samtlige varegrupper .. */ {
                LocalVare v = new LocalVare(rs.getString("navn"), rs.getDouble("indkøbspris"), rs.getDouble("salgspris"), rs.getInt("antal"), rs.getString("vgruppe"), rs.getDouble("avance"));
                vare.add(v);
                System.out.println("adding vare to listet " + rs.getString("navn"));
            }
            System.out.println("i vare dao antal " + vare.size());
            System.out.println("vare dao ");
        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
        }
        return vare;
    }

    public ArrayList<LokalVaregruppe> hentVaregrupper() {
        ArrayList<LokalVaregruppe> varegrupper = new ArrayList<>();
        ResultSet rs = null;
        /* Hent alle vare grupper */
        String sql = "call `hent varegruppe`();";
        System.out.println("sql   " + sql);
        try {
            rs = conn.getResult(sql);
            while (rs.next()) /* Hent samtlige varegrupper .. */ {
                LokalVaregruppe v = new LokalVaregruppe(rs.getString("navn"));
                varegrupper.add(v);
                System.out.println("adding lokale item");
            }
        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
        }
        return varegrupper;
    }

    public void updateOrdre(OrdreInterface ordre) {
        try {
            
            
            /* Hent alle vare grupper */
            for (KurvItemInterface k : ordre.getVareListe()) {
                boolean vareFindes = false; 
               
                String navn = k.getVare().getVareNavn();
                String sql_findes = "call `findes vare`('" + navn + "');";    
                System.out.println("findes sql " + sql_findes);
                ResultSet rs2 = conn.getResult(sql_findes);
                if (rs2.next()) {                    
                    vareFindes = true;
                }
                
                if (vareFindes) {
                    String sql = "call `update lager`('" + navn + "', " + k.getVare().getAntal() + ");";
                    System.out.println("vare findes " + navn);
                    conn.execute(sql); 
                } else {
                    // opret
                    System.out.println("vare skal oprettes  " + navn);
                    int salgspris = (int)Math.round( k.getVare().getVarePris() * 1.25 );
                    int avance = (int)Math.round( salgspris - k.getVare().getVarePris() );
                    String sql = "insert into vare values ('" + navn + "', " + k.getVare().getVarePris()+ ", " + salgspris + ", " + avance + ", " + k.getVare().getAntal() + ", '" + k.getVare().getVareGruppe() + "');";
                    System.out.println("sql " + sql);
                    conn.execute(sql);
                }
            }
        } catch (RemoteException ex) {
            System.out.println("fejl i opdatering af vare RMI remote ");
            
        } catch (SQLException ex) {
            System.out.println("fejl i opdatering af vare ");
        }

      
    }
}
